home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / nss / pkcs11t.h < prev    next >
C/C++ Source or Header  |  2006-04-20  |  65KB  |  1,748 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is the Netscape security libraries.
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  * RSA Security, Inc.
  18.  * Portions created by the Initial Developer are Copyright (C) 1994-2000
  19.  * the Initial Developer. All Rights Reserved.
  20.  *
  21.  * Contributor(s):
  22.  *   Dr Vipul Gupta <vipul.gupta@sun.com>, Sun Microsystems Laboratories
  23.  *
  24.  * Alternatively, the contents of this file may be used under the terms of
  25.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  26.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  27.  * in which case the provisions of the GPL or the LGPL are applicable instead
  28.  * of those above. If you wish to allow use of your version of this file only
  29.  * under the terms of either the GPL or the LGPL, and not to allow others to
  30.  * use your version of this file under the terms of the MPL, indicate your
  31.  * decision by deleting the provisions above and replace them with the notice
  32.  * and other provisions required by the GPL or the LGPL. If you do not delete
  33.  * the provisions above, a recipient may use your version of this file under
  34.  * the terms of any one of the MPL, the GPL or the LGPL.
  35.  *
  36.  * ***** END LICENSE BLOCK ***** */
  37. /* License to copy and use this software is granted provided that it is
  38.  * identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface
  39.  * (Cryptoki)" in all material mentioning or referencing this software.
  40.  
  41.  * License is also granted to make and use derivative works provided that
  42.  * such works are identified as "derived from the RSA Security Inc. PKCS #11
  43.  * Cryptographic Token Interface (Cryptoki)" in all material mentioning or
  44.  * referencing the derived work.
  45.  
  46.  * RSA Security Inc. makes no representations concerning either the
  47.  * merchantability of this software or the suitability of this software for
  48.  * any particular purpose. It is provided "as is" without express or implied
  49.  * warranty of any kind.
  50.  */
  51.  
  52.  
  53. #ifndef _PKCS11T_H_
  54. #define _PKCS11T_H_ 1
  55.  
  56. #define CK_TRUE 1
  57. #define CK_FALSE 0
  58.  
  59. #include "prtypes.h"
  60.  
  61. #define CK_PTR *
  62. #define CK_NULL_PTR 0
  63. #define CK_CALLBACK_FUNCTION(rv,func) rv (PR_CALLBACK * func)
  64. #define CK_DECLARE_FUNCTION(rv,func) PR_EXTERN(rv) func
  65. #define CK_DECLARE_FUNCTION_POINTER(rv,func) rv (PR_CALLBACK * func)
  66.  
  67. #define CK_INVALID_SESSION    0
  68.  
  69. /* an unsigned 8-bit value */
  70. typedef unsigned char     CK_BYTE;
  71.  
  72. /* an unsigned 8-bit character */
  73. typedef CK_BYTE           CK_CHAR;
  74.  
  75. /* an 8-bit UTF-8 character */
  76. typedef CK_BYTE           CK_UTF8CHAR;
  77.  
  78. /* a BYTE-sized Boolean flag */
  79. typedef CK_BYTE           CK_BBOOL;
  80.  
  81. /* an unsigned value, at least 32 bits long */
  82. typedef unsigned long int CK_ULONG;
  83.  
  84. /* a signed value, the same size as a CK_ULONG */
  85. /* CK_LONG is new for v2.0 */
  86. typedef long int          CK_LONG;
  87.  
  88. /* at least 32 bits; each bit is a Boolean flag */
  89. typedef CK_ULONG          CK_FLAGS;
  90.  
  91.  
  92. /* some special values for certain CK_ULONG variables */
  93. #define CK_UNAVAILABLE_INFORMATION (~0UL)
  94. #define CK_EFFECTIVELY_INFINITE    0
  95.  
  96.  
  97. typedef CK_BYTE     CK_PTR   CK_BYTE_PTR;
  98. typedef CK_CHAR     CK_PTR   CK_CHAR_PTR;
  99. typedef CK_UTF8CHAR CK_PTR   CK_UTF8CHAR_PTR;
  100. typedef CK_ULONG    CK_PTR   CK_ULONG_PTR;
  101. typedef void        CK_PTR   CK_VOID_PTR;
  102.  
  103. /* Pointer to a CK_VOID_PTR-- i.e., pointer to pointer to void */
  104. typedef CK_VOID_PTR CK_PTR CK_VOID_PTR_PTR;
  105.  
  106.  
  107. /* The following value is always invalid if used as a session */
  108. /* handle or object handle */
  109. #define CK_INVALID_HANDLE 0
  110.  
  111.  
  112. /* pack */
  113. #include "pkcs11p.h"
  114.  
  115. typedef struct CK_VERSION {
  116.   CK_BYTE       major;  /* integer portion of version number */
  117.   CK_BYTE       minor;  /* 1/100ths portion of version number */
  118. } CK_VERSION;
  119.  
  120. typedef CK_VERSION CK_PTR CK_VERSION_PTR;
  121.  
  122.  
  123. typedef struct CK_INFO {
  124.   /* manufacturerID and libraryDecription have been changed from
  125.    * CK_CHAR to CK_UTF8CHAR for v2.10 */
  126.   CK_VERSION    cryptokiVersion;     /* PKCS #11 interface ver */
  127.   CK_UTF8CHAR   manufacturerID[32];  /* blank padded */
  128.   CK_FLAGS      flags;               /* must be zero */
  129.  
  130.   /* libraryDescription and libraryVersion are new for v2.0 */
  131.   CK_UTF8CHAR   libraryDescription[32];  /* blank padded */
  132.   CK_VERSION    libraryVersion;          /* version of library */
  133. } CK_INFO;
  134.  
  135. typedef CK_INFO CK_PTR    CK_INFO_PTR;
  136.  
  137.  
  138. /* CK_NOTIFICATION enumerates the types of notifications that
  139.  * PKCS #11 provides to an application */
  140. /* CK_NOTIFICATION has been changed from an enum to a CK_ULONG
  141.  * for v2.0 */
  142. typedef CK_ULONG CK_NOTIFICATION;
  143. #define CKN_SURRENDER       0
  144.  
  145.  
  146. typedef CK_ULONG          CK_SLOT_ID;
  147.  
  148. typedef CK_SLOT_ID CK_PTR CK_SLOT_ID_PTR;
  149.  
  150.  
  151. /* CK_SLOT_INFO provides information about a slot */
  152. typedef struct CK_SLOT_INFO {
  153.   /* slotDescription and manufacturerID have been changed from
  154.    * CK_CHAR to CK_UTF8CHAR for v2.10 */
  155.   CK_UTF8CHAR   slotDescription[64];  /* blank padded */
  156.   CK_UTF8CHAR   manufacturerID[32];   /* blank padded */
  157.   CK_FLAGS      flags;
  158.  
  159.   /* hardwareVersion and firmwareVersion are new for v2.0 */
  160.   CK_VERSION    hardwareVersion;  /* version of hardware */
  161.   CK_VERSION    firmwareVersion;  /* version of firmware */
  162. } CK_SLOT_INFO;
  163.  
  164. /* flags: bit flags that provide capabilities of the slot
  165.  *      Bit Flag              Mask        Meaning
  166.  */
  167. #define CKF_TOKEN_PRESENT     0x00000001  /* a token is there */
  168. #define CKF_REMOVABLE_DEVICE  0x00000002  /* removable devices*/
  169. #define CKF_HW_SLOT           0x00000004  /* hardware slot */
  170.  
  171. typedef CK_SLOT_INFO CK_PTR CK_SLOT_INFO_PTR;
  172.  
  173.  
  174. /* CK_TOKEN_INFO provides information about a token */
  175. typedef struct CK_TOKEN_INFO {
  176.   /* label, manufacturerID, and model have been changed from
  177.    * CK_CHAR to CK_UTF8CHAR for v2.10 */
  178.   CK_UTF8CHAR   label[32];           /* blank padded */
  179.   CK_UTF8CHAR   manufacturerID[32];  /* blank padded */
  180.   CK_UTF8CHAR   model[16];           /* blank padded */
  181.   CK_CHAR       serialNumber[16];    /* blank padded */
  182.   CK_FLAGS      flags;               /* see below */
  183.  
  184.   /* ulMaxSessionCount, ulSessionCount, ulMaxRwSessionCount,
  185.    * ulRwSessionCount, ulMaxPinLen, and ulMinPinLen have all been
  186.    * changed from CK_USHORT to CK_ULONG for v2.0 */
  187.   CK_ULONG      ulMaxSessionCount;     /* max open sessions */
  188.   CK_ULONG      ulSessionCount;        /* sess. now open */
  189.   CK_ULONG      ulMaxRwSessionCount;   /* max R/W sessions */
  190.   CK_ULONG      ulRwSessionCount;      /* R/W sess. now open */
  191.   CK_ULONG      ulMaxPinLen;           /* in bytes */
  192.   CK_ULONG      ulMinPinLen;           /* in bytes */
  193.   CK_ULONG      ulTotalPublicMemory;   /* in bytes */
  194.   CK_ULONG      ulFreePublicMemory;    /* in bytes */
  195.   CK_ULONG      ulTotalPrivateMemory;  /* in bytes */
  196.   CK_ULONG      ulFreePrivateMemory;   /* in bytes */
  197.  
  198.   /* hardwareVersion, firmwareVersion, and time are new for
  199.    * v2.0 */
  200.   CK_VERSION    hardwareVersion;       /* version of hardware */
  201.   CK_VERSION    firmwareVersion;       /* version of firmware */
  202.   CK_CHAR       utcTime[16];           /* time */
  203. } CK_TOKEN_INFO;
  204.  
  205. /* The flags parameter is defined as follows:
  206.  *      Bit Flag                    Mask        Meaning
  207.  */
  208. #define CKF_RNG                     0x00000001  /* has random #
  209.                                                  * generator */
  210. #define CKF_WRITE_PROTECTED         0x00000002  /* token is
  211.                                                  * write-
  212.                                                  * protected */
  213. #define CKF_LOGIN_REQUIRED          0x00000004  /* user must
  214.                                                  * login */
  215. #define CKF_USER_PIN_INITIALIZED    0x00000008  /* normal user's
  216.                                                  * PIN is set */
  217.  
  218. /* CKF_RESTORE_KEY_NOT_NEEDED is new for v2.0.  If it is set,
  219.  * that means that *every* time the state of cryptographic
  220.  * operations of a session is successfully saved, all keys
  221.  * needed to continue those operations are stored in the state */
  222. #define CKF_RESTORE_KEY_NOT_NEEDED  0x00000020
  223.  
  224. /* CKF_CLOCK_ON_TOKEN is new for v2.0.  If it is set, that means
  225.  * that the token has some sort of clock.  The time on that
  226.  * clock is returned in the token info structure */
  227. #define CKF_CLOCK_ON_TOKEN          0x00000040
  228.  
  229. /* CKF_PROTECTED_AUTHENTICATION_PATH is new for v2.0.  If it is
  230.  * set, that means that there is some way for the user to login
  231.  * without sending a PIN through the PKCS #11 library itself */
  232. #define CKF_PROTECTED_AUTHENTICATION_PATH 0x00000100
  233.  
  234. /* CKF_DUAL_CRYPTO_OPERATIONS is new for v2.0.  If it is true,
  235.  * that means that a single session with the token can perform
  236.  * dual simultaneous cryptographic operations (digest and
  237.  * encrypt; decrypt and digest; sign and encrypt; and decrypt
  238.  * and sign) */
  239. #define CKF_DUAL_CRYPTO_OPERATIONS  0x00000200
  240.  
  241. /* CKF_TOKEN_INITIALIZED if new for v2.10. If it is true, the
  242.  * token has been initialized using C_InitializeToken or an
  243.  * equivalent mechanism outside the scope of PKCS #11.
  244.  * Calling C_InitializeToken when this flag is set will cause
  245.  * the token to be reinitialized. */
  246. #define CKF_TOKEN_INITIALIZED       0x00000400
  247.  
  248. /* CKF_SECONDARY_AUTHENTICATION if new for v2.10. If it is
  249.  * true, the token supports secondary authentication for
  250.  * private key objects. This flag is deprecated in v2.11 and
  251.    onwards. */
  252. #define CKF_SECONDARY_AUTHENTICATION  0x00000800
  253.  
  254. /* CKF_USER_PIN_COUNT_LOW if new for v2.10. If it is true, an
  255.  * incorrect user login PIN has been entered at least once
  256.  * since the last successful authentication. */
  257. #define CKF_USER_PIN_COUNT_LOW       0x00010000
  258.  
  259. /* CKF_USER_PIN_FINAL_TRY if new for v2.10. If it is true,
  260.  * supplying an incorrect user PIN will it to become locked. */
  261. #define CKF_USER_PIN_FINAL_TRY       0x00020000
  262.  
  263. /* CKF_USER_PIN_LOCKED if new for v2.10. If it is true, the
  264.  * user PIN has been locked. User login to the token is not
  265.  * possible. */
  266. #define CKF_USER_PIN_LOCKED          0x00040000
  267.  
  268. /* CKF_USER_PIN_TO_BE_CHANGED if new for v2.10. If it is true,
  269.  * the user PIN value is the default value set by token
  270.  * initialization or manufacturing, or the PIN has been
  271.  * expired by the card. */
  272. #define CKF_USER_PIN_TO_BE_CHANGED   0x00080000
  273.  
  274. /* CKF_SO_PIN_COUNT_LOW if new for v2.10. If it is true, an
  275.  * incorrect SO login PIN has been entered at least once since
  276.  * the last successful authentication. */
  277. #define CKF_SO_PIN_COUNT_LOW         0x00100000
  278.  
  279. /* CKF_SO_PIN_FINAL_TRY if new for v2.10. If it is true,
  280.  * supplying an incorrect SO PIN will it to become locked. */
  281. #define CKF_SO_PIN_FINAL_TRY         0x00200000
  282.  
  283. /* CKF_SO_PIN_LOCKED if new for v2.10. If it is true, the SO
  284.  * PIN has been locked. SO login to the token is not possible.
  285.  */
  286. #define CKF_SO_PIN_LOCKED            0x00400000
  287.  
  288. /* CKF_SO_PIN_TO_BE_CHANGED if new for v2.10. If it is true,
  289.  * the SO PIN value is the default value set by token
  290.  * initialization or manufacturing, or the PIN has been
  291.  * expired by the card. */
  292. #define CKF_SO_PIN_TO_BE_CHANGED     0x00800000
  293.  
  294. typedef CK_TOKEN_INFO CK_PTR CK_TOKEN_INFO_PTR;
  295.  
  296.  
  297. /* CK_SESSION_HANDLE is a PKCS #11-assigned value that
  298.  * identifies a session */
  299. typedef CK_ULONG          CK_SESSION_HANDLE;
  300.  
  301. typedef CK_SESSION_HANDLE CK_PTR CK_SESSION_HANDLE_PTR;
  302.  
  303.  
  304. /* CK_USER_TYPE enumerates the types of PKCS #11 users */
  305. /* CK_USER_TYPE has been changed from an enum to a CK_ULONG for
  306.  * v2.0 */
  307. typedef CK_ULONG          CK_USER_TYPE;
  308. /* Security Officer */
  309. #define CKU_SO    0
  310. /* Normal user */
  311. #define CKU_USER  1
  312. /* Context specific (added in v2.20) */
  313. #define CKU_CONTEXT_SPECIFIC   2
  314.  
  315. /* CK_STATE enumerates the session states */
  316. /* CK_STATE has been changed from an enum to a CK_ULONG for
  317.  * v2.0 */
  318. typedef CK_ULONG          CK_STATE;
  319. #define CKS_RO_PUBLIC_SESSION  0
  320. #define CKS_RO_USER_FUNCTIONS  1
  321. #define CKS_RW_PUBLIC_SESSION  2
  322. #define CKS_RW_USER_FUNCTIONS  3
  323. #define CKS_RW_SO_FUNCTIONS    4
  324.  
  325.  
  326. /* CK_SESSION_INFO provides information about a session */
  327. typedef struct CK_SESSION_INFO {
  328.   CK_SLOT_ID    slotID;
  329.   CK_STATE      state;
  330.   CK_FLAGS      flags;          /* see below */
  331.  
  332.   /* ulDeviceError was changed from CK_USHORT to CK_ULONG for
  333.    * v2.0 */
  334.   CK_ULONG      ulDeviceError;  /* device-dependent error code */
  335. } CK_SESSION_INFO;
  336.  
  337. /* The flags are defined in the following table:
  338.  *      Bit Flag                Mask        Meaning
  339.  */
  340. #define CKF_RW_SESSION          0x00000002  /* session is r/w */
  341. #define CKF_SERIAL_SESSION      0x00000004  /* no parallel */
  342.  
  343. typedef CK_SESSION_INFO CK_PTR CK_SESSION_INFO_PTR;
  344.  
  345.  
  346. /* CK_OBJECT_HANDLE is a token-specific identifier for an
  347.  * object  */
  348. typedef CK_ULONG          CK_OBJECT_HANDLE;
  349.  
  350. typedef CK_OBJECT_HANDLE CK_PTR CK_OBJECT_HANDLE_PTR;
  351.  
  352.  
  353. /* CK_OBJECT_CLASS is a value that identifies the classes (or
  354.  * types) of objects that PKCS #11 recognizes.  It is defined
  355.  * as follows: */
  356. /* CK_OBJECT_CLASS was changed from CK_USHORT to CK_ULONG for
  357.  * v2.0 */
  358. typedef CK_ULONG          CK_OBJECT_CLASS;
  359.  
  360. /* The following classes of objects are defined: */
  361. /* CKO_HW_FEATURE is new for v2.10 */
  362. /* CKO_DOMAIN_PARAMETERS is new for v2.11 */
  363. /* CKO_MECHANISM is new for v2.20 */
  364. #define CKO_DATA              0x00000000
  365. #define CKO_CERTIFICATE       0x00000001
  366. #define CKO_PUBLIC_KEY        0x00000002
  367. #define CKO_PRIVATE_KEY       0x00000003
  368. #define CKO_SECRET_KEY        0x00000004
  369. #define CKO_HW_FEATURE        0x00000005
  370. #define CKO_DOMAIN_PARAMETERS 0x00000006
  371. #define CKO_MECHANISM         0x00000007
  372. #define CKO_VENDOR_DEFINED    0x80000000
  373.  
  374. typedef CK_OBJECT_CLASS CK_PTR CK_OBJECT_CLASS_PTR;
  375.  
  376. /* CK_HW_FEATURE_TYPE is new for v2.10. CK_HW_FEATURE_TYPE is a
  377.  * value that identifies the hardware feature type of an object
  378.  * with CK_OBJECT_CLASS equal to CKO_HW_FEATURE. */
  379. typedef CK_ULONG          CK_HW_FEATURE_TYPE;
  380.  
  381. /* The following hardware feature types are defined */
  382. /* CKH_USER_INTERFACE is new for v2.20 */
  383. #define CKH_MONOTONIC_COUNTER  0x00000001
  384. #define CKH_CLOCK           0x00000002
  385. #define CKH_USER_INTERFACE  0x00000003
  386. #define CKH_VENDOR_DEFINED  0x80000000
  387.  
  388. /* CK_KEY_TYPE is a value that identifies a key type */
  389. /* CK_KEY_TYPE was changed from CK_USHORT to CK_ULONG for v2.0 */
  390. typedef CK_ULONG          CK_KEY_TYPE;
  391.  
  392. /* the following key types are defined: */
  393. #define CKK_RSA             0x00000000
  394. #define CKK_DSA             0x00000001
  395. #define CKK_DH              0x00000002
  396.  
  397. /* CKK_ECDSA and CKK_KEA are new for v2.0 */
  398. /* CKK_ECDSA is deprecated in v2.11, CKK_EC is preferred. */
  399. #define CKK_ECDSA           0x00000003
  400. #define CKK_EC              0x00000003
  401. #define CKK_X9_42_DH        0x00000004
  402. #define CKK_KEA             0x00000005
  403.  
  404. #define CKK_GENERIC_SECRET  0x00000010
  405. #define CKK_RC2             0x00000011
  406. #define CKK_RC4             0x00000012
  407. #define CKK_DES             0x00000013
  408. #define CKK_DES2            0x00000014
  409. #define CKK_DES3            0x00000015
  410.  
  411. /* all these key types are new for v2.0 */
  412. #define CKK_CAST            0x00000016
  413. #define CKK_CAST3           0x00000017
  414. /* CKK_CAST5 is deprecated in v2.11, CKK_CAST128 is preferred. */
  415. #define CKK_CAST5           0x00000018
  416. #define CKK_CAST128         0x00000018
  417. #define CKK_RC5             0x00000019
  418. #define CKK_IDEA            0x0000001A
  419. #define CKK_SKIPJACK        0x0000001B
  420. #define CKK_BATON           0x0000001C
  421. #define CKK_JUNIPER         0x0000001D
  422. #define CKK_CDMF            0x0000001E
  423. #define CKK_AES             0x0000001F
  424.  
  425. /* BlowFish and TwoFish are new for v2.20 */
  426. #define CKK_BLOWFISH        0x00000020
  427. #define CKK_TWOFISH         0x00000021
  428.  
  429. #define CKK_VENDOR_DEFINED  0x80000000
  430.  
  431.  
  432. /* CK_CERTIFICATE_TYPE is a value that identifies a certificate
  433.  * type */
  434. /* CK_CERTIFICATE_TYPE was changed from CK_USHORT to CK_ULONG
  435.  * for v2.0 */
  436. typedef CK_ULONG          CK_CERTIFICATE_TYPE;
  437.  
  438. /* The following certificate types are defined: */
  439. /* CKC_X_509_ATTR_CERT is new for v2.10 */
  440. /* CKC_WTLS is new for v2.20 */
  441. #define CKC_X_509           0x00000000
  442. #define CKC_X_509_ATTR_CERT 0x00000001
  443. #define CKC_WTLS            0x00000002
  444. #define CKC_VENDOR_DEFINED  0x80000000
  445.  
  446.  
  447. /* CK_ATTRIBUTE_TYPE is a value that identifies an attribute
  448.  * type */
  449. /* CK_ATTRIBUTE_TYPE was changed from CK_USHORT to CK_ULONG for
  450.  * v2.0 */
  451. typedef CK_ULONG          CK_ATTRIBUTE_TYPE;
  452.  
  453. /* The CKF_ARRAY_ATTRIBUTE flag identifies an attribute which
  454.    consists of an array of values. */
  455. #define CKF_ARRAY_ATTRIBUTE    0x40000000
  456.  
  457. /* The following attribute types are defined: */
  458. #define CKA_CLASS              0x00000000
  459. #define CKA_TOKEN              0x00000001
  460. #define CKA_PRIVATE            0x00000002
  461. #define CKA_LABEL              0x00000003
  462. #define CKA_APPLICATION        0x00000010
  463. #define CKA_VALUE              0x00000011
  464.  
  465. /* CKA_OBJECT_ID is new for v2.10 */
  466. #define CKA_OBJECT_ID          0x00000012
  467.  
  468. #define CKA_CERTIFICATE_TYPE   0x00000080
  469. #define CKA_ISSUER             0x00000081
  470. #define CKA_SERIAL_NUMBER      0x00000082
  471.  
  472. /* CKA_AC_ISSUER, CKA_OWNER, and CKA_ATTR_TYPES are new
  473.  * for v2.10 */
  474. #define CKA_AC_ISSUER          0x00000083
  475. #define CKA_OWNER              0x00000084
  476. #define CKA_ATTR_TYPES         0x00000085
  477.  
  478. /* CKA_TRUSTED is new for v2.11 */
  479. #define CKA_TRUSTED            0x00000086
  480.  
  481. /* CKA_CERTIFICATE_CATEGORY ...
  482.  * CKA_CHECK_VALUE are new for v2.20 */
  483. #define CKA_CERTIFICATE_CATEGORY        0x00000087
  484. #define CKA_JAVA_MIDP_SECURITY_DOMAIN   0x00000088
  485. #define CKA_URL                         0x00000089
  486. #define CKA_HASH_OF_SUBJECT_PUBLIC_KEY  0x0000008A
  487. #define CKA_HASH_OF_ISSUER_PUBLIC_KEY   0x0000008B
  488. #define CKA_CHECK_VALUE                 0x00000090
  489.  
  490. #define CKA_KEY_TYPE           0x00000100
  491. #define CKA_SUBJECT            0x00000101
  492. #define CKA_ID                 0x00000102
  493. #define CKA_SENSITIVE          0x00000103
  494. #define CKA_ENCRYPT            0x00000104
  495. #define CKA_DECRYPT            0x00000105
  496. #define CKA_WRAP               0x00000106
  497. #define CKA_UNWRAP             0x00000107
  498. #define CKA_SIGN               0x00000108
  499. #define CKA_SIGN_RECOVER       0x00000109
  500. #define CKA_VERIFY             0x0000010A
  501. #define CKA_VERIFY_RECOVER     0x0000010B
  502. #define CKA_DERIVE             0x0000010C
  503. #define CKA_START_DATE         0x00000110
  504. #define CKA_END_DATE           0x00000111
  505. #define CKA_MODULUS            0x00000120
  506. #define CKA_MODULUS_BITS       0x00000121
  507. #define CKA_PUBLIC_EXPONENT    0x00000122
  508. #define CKA_PRIVATE_EXPONENT   0x00000123
  509. #define CKA_PRIME_1            0x00000124
  510. #define CKA_PRIME_2            0x00000125
  511. #define CKA_EXPONENT_1         0x00000126
  512. #define CKA_EXPONENT_2         0x00000127
  513. #define CKA_COEFFICIENT        0x00000128
  514. #define CKA_PRIME              0x00000130
  515. #define CKA_SUBPRIME           0x00000131
  516. #define CKA_BASE               0x00000132
  517.  
  518. /* CKA_PRIME_BITS and CKA_SUB_PRIME_BITS are new for v2.11 */
  519. #define CKA_PRIME_BITS         0x00000133
  520. #define CKA_SUBPRIME_BITS      0x00000134
  521. #define CKA_SUB_PRIME_BITS     CKA_SUBPRIME_BITS
  522. /* (To retain backwards-compatibility) */
  523.  
  524. #define CKA_VALUE_BITS         0x00000160
  525. #define CKA_VALUE_LEN          0x00000161
  526.  
  527. /* CKA_EXTRACTABLE, CKA_LOCAL, CKA_NEVER_EXTRACTABLE,
  528.  * CKA_ALWAYS_SENSITIVE, CKA_MODIFIABLE, CKA_ECDSA_PARAMS,
  529.  * and CKA_EC_POINT are new for v2.0 */
  530. #define CKA_EXTRACTABLE        0x00000162
  531. #define CKA_LOCAL              0x00000163
  532. #define CKA_NEVER_EXTRACTABLE  0x00000164
  533. #define CKA_ALWAYS_SENSITIVE   0x00000165
  534.  
  535. /* CKA_KEY_GEN_MECHANISM is new for v2.11 */
  536. #define CKA_KEY_GEN_MECHANISM  0x00000166
  537.  
  538. #define CKA_MODIFIABLE         0x00000170
  539.  
  540. /* CKA_ECDSA_PARAMS is deprecated in v2.11,
  541.  * CKA_EC_PARAMS is preferred. */
  542. #define CKA_ECDSA_PARAMS       0x00000180
  543. #define CKA_EC_PARAMS          0x00000180
  544.  
  545. #define CKA_EC_POINT           0x00000181
  546.  
  547. /* CKA_SECONDARY_AUTH, CKA_AUTH_PIN_FLAGS,
  548.  * are new for v2.10. Deprecated in v2.11 and onwards. */
  549. #define CKA_SECONDARY_AUTH     0x00000200
  550. #define CKA_AUTH_PIN_FLAGS     0x00000201
  551.  
  552. /* CKA_ALWAYS_AUTHENTICATE ...
  553.  * CKA_UNWRAP_TEMPLATE are new for v2.20 */
  554. #define CKA_ALWAYS_AUTHENTICATE  0x00000202
  555.  
  556. #define CKA_WRAP_WITH_TRUSTED    0x00000210
  557. #define CKA_WRAP_TEMPLATE        (CKF_ARRAY_ATTRIBUTE|0x00000211)
  558. #define CKA_UNWRAP_TEMPLATE      (CKF_ARRAY_ATTRIBUTE|0x00000212)
  559.  
  560. /* CKA_HW_FEATURE_TYPE, CKA_RESET_ON_INIT, and CKA_HAS_RESET
  561.  * are new for v2.10 */
  562. #define CKA_HW_FEATURE_TYPE    0x00000300
  563. #define CKA_RESET_ON_INIT      0x00000301
  564. #define CKA_HAS_RESET          0x00000302
  565.  
  566. /* The following attributes are new for v2.20 */
  567. #define CKA_PIXEL_X                     0x00000400
  568. #define CKA_PIXEL_Y                     0x00000401
  569. #define CKA_RESOLUTION                  0x00000402
  570. #define CKA_CHAR_ROWS                   0x00000403
  571. #define CKA_CHAR_COLUMNS                0x00000404
  572. #define CKA_COLOR                       0x00000405
  573. #define CKA_BITS_PER_PIXEL              0x00000406
  574. #define CKA_CHAR_SETS                   0x00000480
  575. #define CKA_ENCODING_METHODS            0x00000481
  576. #define CKA_MIME_TYPES                  0x00000482
  577. #define CKA_MECHANISM_TYPE              0x00000500
  578. #define CKA_REQUIRED_CMS_ATTRIBUTES     0x00000501
  579. #define CKA_DEFAULT_CMS_ATTRIBUTES      0x00000502
  580. #define CKA_SUPPORTED_CMS_ATTRIBUTES    0x00000503
  581. #define CKA_ALLOWED_MECHANISMS          (CKF_ARRAY_ATTRIBUTE|0x00000600)
  582.  
  583. #define CKA_VENDOR_DEFINED     0x80000000
  584.  
  585.  
  586. /* CK_ATTRIBUTE is a structure that includes the type, length
  587.  * and value of an attribute */
  588. typedef struct CK_ATTRIBUTE {
  589.   CK_ATTRIBUTE_TYPE type;
  590.   CK_VOID_PTR       pValue;
  591.  
  592.   /* ulValueLen went from CK_USHORT to CK_ULONG for v2.0 */
  593.   CK_ULONG          ulValueLen;  /* in bytes */
  594. } CK_ATTRIBUTE;
  595.  
  596. typedef CK_ATTRIBUTE CK_PTR CK_ATTRIBUTE_PTR;
  597.  
  598.  
  599. /* CK_DATE is a structure that defines a date */
  600. typedef struct CK_DATE{
  601.   CK_CHAR       year[4];   /* the year ("1900" - "9999") */
  602.   CK_CHAR       month[2];  /* the month ("01" - "12") */
  603.   CK_CHAR       day[2];    /* the day   ("01" - "31") */
  604. } CK_DATE;
  605.  
  606.  
  607. /* CK_MECHANISM_TYPE is a value that identifies a mechanism
  608.  * type */
  609. /* CK_MECHANISM_TYPE was changed from CK_USHORT to CK_ULONG for
  610.  * v2.0 */
  611. typedef CK_ULONG          CK_MECHANISM_TYPE;
  612.  
  613. /* the following mechanism types are defined: */
  614. #define CKM_RSA_PKCS_KEY_PAIR_GEN      0x00000000
  615. #define CKM_RSA_PKCS                   0x00000001
  616. #define CKM_RSA_9796                   0x00000002
  617. #define CKM_RSA_X_509                  0x00000003
  618.  
  619. /* CKM_MD2_RSA_PKCS, CKM_MD5_RSA_PKCS, and CKM_SHA1_RSA_PKCS
  620.  * are new for v2.0.  They are mechanisms which hash and sign */
  621. #define CKM_MD2_RSA_PKCS               0x00000004
  622. #define CKM_MD5_RSA_PKCS               0x00000005
  623. #define CKM_SHA1_RSA_PKCS              0x00000006
  624.  
  625. /* CKM_RIPEMD128_RSA_PKCS, CKM_RIPEMD160_RSA_PKCS, and
  626.  * CKM_RSA_PKCS_OAEP are new for v2.10 */
  627. #define CKM_RIPEMD128_RSA_PKCS         0x00000007
  628. #define CKM_RIPEMD160_RSA_PKCS         0x00000008
  629. #define CKM_RSA_PKCS_OAEP              0x00000009
  630.  
  631. /* CKM_RSA_X9_31_KEY_PAIR_GEN, CKM_RSA_X9_31, CKM_SHA1_RSA_X9_31,
  632.  * CKM_RSA_PKCS_PSS, and CKM_SHA1_RSA_PKCS_PSS are new for v2.11 */
  633. #define CKM_RSA_X9_31_KEY_PAIR_GEN     0x0000000A
  634. #define CKM_RSA_X9_31                  0x0000000B
  635. #define CKM_SHA1_RSA_X9_31             0x0000000C
  636. #define CKM_RSA_PKCS_PSS               0x0000000D
  637. #define CKM_SHA1_RSA_PKCS_PSS          0x0000000E
  638.  
  639. #define CKM_DSA_KEY_PAIR_GEN           0x00000010
  640. #define CKM_DSA                        0x00000011
  641. #define CKM_DSA_SHA1                   0x00000012
  642. #define CKM_DH_PKCS_KEY_PAIR_GEN       0x00000020
  643. #define CKM_DH_PKCS_DERIVE             0x00000021
  644.  
  645. /* CKM_X9_42_DH_KEY_PAIR_GEN, CKM_X9_42_DH_DERIVE,
  646.  * CKM_X9_42_DH_HYBRID_DERIVE, and CKM_X9_42_MQV_DERIVE are new for
  647.  * v2.11 */
  648. #define CKM_X9_42_DH_KEY_PAIR_GEN      0x00000030
  649. #define CKM_X9_42_DH_DERIVE            0x00000031
  650. #define CKM_X9_42_DH_HYBRID_DERIVE     0x00000032
  651. #define CKM_X9_42_MQV_DERIVE           0x00000033
  652.  
  653. /* CKM_SHA256/384/512 are new for v2.20 */
  654. #define CKM_SHA256_RSA_PKCS            0x00000040
  655. #define CKM_SHA384_RSA_PKCS            0x00000041
  656. #define CKM_SHA512_RSA_PKCS            0x00000042
  657. #define CKM_SHA256_RSA_PKCS_PSS        0x00000043
  658. #define CKM_SHA384_RSA_PKCS_PSS        0x00000044
  659. #define CKM_SHA512_RSA_PKCS_PSS        0x00000045
  660.  
  661. #define CKM_RC2_KEY_GEN                0x00000100
  662. #define CKM_RC2_ECB                    0x00000101
  663. #define CKM_RC2_CBC                    0x00000102
  664. #define CKM_RC2_MAC                    0x00000103
  665.  
  666. /* CKM_RC2_MAC_GENERAL and CKM_RC2_CBC_PAD are new for v2.0 */
  667. #define CKM_RC2_MAC_GENERAL            0x00000104
  668. #define CKM_RC2_CBC_PAD                0x00000105
  669.  
  670. #define CKM_RC4_KEY_GEN                0x00000110
  671. #define CKM_RC4                        0x00000111
  672. #define CKM_DES_KEY_GEN                0x00000120
  673. #define CKM_DES_ECB                    0x00000121
  674. #define CKM_DES_CBC                    0x00000122
  675. #define CKM_DES_MAC                    0x00000123
  676.  
  677. /* CKM_DES_MAC_GENERAL and CKM_DES_CBC_PAD are new for v2.0 */
  678. #define CKM_DES_MAC_GENERAL            0x00000124
  679. #define CKM_DES_CBC_PAD                0x00000125
  680.  
  681. #define CKM_DES2_KEY_GEN               0x00000130
  682. #define CKM_DES3_KEY_GEN               0x00000131
  683. #define CKM_DES3_ECB                   0x00000132
  684. #define CKM_DES3_CBC                   0x00000133
  685. #define CKM_DES3_MAC                   0x00000134
  686.  
  687. /* CKM_DES3_MAC_GENERAL, CKM_DES3_CBC_PAD, CKM_CDMF_KEY_GEN,
  688.  * CKM_CDMF_ECB, CKM_CDMF_CBC, CKM_CDMF_MAC,
  689.  * CKM_CDMF_MAC_GENERAL, and CKM_CDMF_CBC_PAD are new for v2.0 */
  690. #define CKM_DES3_MAC_GENERAL           0x00000135
  691. #define CKM_DES3_CBC_PAD               0x00000136
  692. #define CKM_CDMF_KEY_GEN               0x00000140
  693. #define CKM_CDMF_ECB                   0x00000141
  694. #define CKM_CDMF_CBC                   0x00000142
  695. #define CKM_CDMF_MAC                   0x00000143
  696. #define CKM_CDMF_MAC_GENERAL           0x00000144
  697. #define CKM_CDMF_CBC_PAD               0x00000145
  698.  
  699. /* the following four DES mechanisms are new for v2.20 */
  700. #define CKM_DES_OFB64                  0x00000150
  701. #define CKM_DES_OFB8                   0x00000151
  702. #define CKM_DES_CFB64                  0x00000152
  703. #define CKM_DES_CFB8                   0x00000153
  704.  
  705. #define CKM_MD2                        0x00000200
  706.  
  707. /* CKM_MD2_HMAC and CKM_MD2_HMAC_GENERAL are new for v2.0 */
  708. #define CKM_MD2_HMAC                   0x00000201
  709. #define CKM_MD2_HMAC_GENERAL           0x00000202
  710.  
  711. #define CKM_MD5                        0x00000210
  712.  
  713. /* CKM_MD5_HMAC and CKM_MD5_HMAC_GENERAL are new for v2.0 */
  714. #define CKM_MD5_HMAC                   0x00000211
  715. #define CKM_MD5_HMAC_GENERAL           0x00000212
  716.  
  717. #define CKM_SHA_1                      0x00000220
  718.  
  719. /* CKM_SHA_1_HMAC and CKM_SHA_1_HMAC_GENERAL are new for v2.0 */
  720. #define CKM_SHA_1_HMAC                 0x00000221
  721. #define CKM_SHA_1_HMAC_GENERAL         0x00000222
  722.  
  723. /* CKM_RIPEMD128, CKM_RIPEMD128_HMAC,
  724.  * CKM_RIPEMD128_HMAC_GENERAL, CKM_RIPEMD160, CKM_RIPEMD160_HMAC,
  725.  * and CKM_RIPEMD160_HMAC_GENERAL are new for v2.10 */
  726. #define CKM_RIPEMD128                  0x00000230
  727. #define CKM_RIPEMD128_HMAC             0x00000231
  728. #define CKM_RIPEMD128_HMAC_GENERAL     0x00000232
  729. #define CKM_RIPEMD160                  0x00000240
  730. #define CKM_RIPEMD160_HMAC             0x00000241
  731. #define CKM_RIPEMD160_HMAC_GENERAL     0x00000242
  732.  
  733. /* CKM_SHA256/384/512 are new for v2.20 */
  734. #define CKM_SHA256                     0x00000250
  735. #define CKM_SHA256_HMAC                0x00000251
  736. #define CKM_SHA256_HMAC_GENERAL        0x00000252
  737. #define CKM_SHA384                     0x00000260
  738. #define CKM_SHA384_HMAC                0x00000261
  739. #define CKM_SHA384_HMAC_GENERAL        0x00000262
  740. #define CKM_SHA512                     0x00000270
  741. #define CKM_SHA512_HMAC                0x00000271
  742. #define CKM_SHA512_HMAC_GENERAL        0x00000272
  743.  
  744. /* All of the following mechanisms are new for v2.0 */
  745. /* Note that CAST128 and CAST5 are the same algorithm */
  746. #define CKM_CAST_KEY_GEN               0x00000300
  747. #define CKM_CAST_ECB                   0x00000301
  748. #define CKM_CAST_CBC                   0x00000302
  749. #define CKM_CAST_MAC                   0x00000303
  750. #define CKM_CAST_MAC_GENERAL           0x00000304
  751. #define CKM_CAST_CBC_PAD               0x00000305
  752. #define CKM_CAST3_KEY_GEN              0x00000310
  753. #define CKM_CAST3_ECB                  0x00000311
  754. #define CKM_CAST3_CBC                  0x00000312
  755. #define CKM_CAST3_MAC                  0x00000313
  756. #define CKM_CAST3_MAC_GENERAL          0x00000314
  757. #define CKM_CAST3_CBC_PAD              0x00000315
  758. #define CKM_CAST5_KEY_GEN              0x00000320
  759. #define CKM_CAST128_KEY_GEN            0x00000320
  760. #define CKM_CAST5_ECB                  0x00000321
  761. #define CKM_CAST128_ECB                0x00000321
  762. #define CKM_CAST5_CBC                  0x00000322
  763. #define CKM_CAST128_CBC                0x00000322
  764. #define CKM_CAST5_MAC                  0x00000323
  765. #define CKM_CAST128_MAC                0x00000323
  766. #define CKM_CAST5_MAC_GENERAL          0x00000324
  767. #define CKM_CAST128_MAC_GENERAL        0x00000324
  768. #define CKM_CAST5_CBC_PAD              0x00000325
  769. #define CKM_CAST128_CBC_PAD            0x00000325
  770. #define CKM_RC5_KEY_GEN                0x00000330
  771. #define CKM_RC5_ECB                    0x00000331
  772. #define CKM_RC5_CBC                    0x00000332
  773. #define CKM_RC5_MAC                    0x00000333
  774. #define CKM_RC5_MAC_GENERAL            0x00000334
  775. #define CKM_RC5_CBC_PAD                0x00000335
  776. #define CKM_IDEA_KEY_GEN               0x00000340
  777. #define CKM_IDEA_ECB                   0x00000341
  778. #define CKM_IDEA_CBC                   0x00000342
  779. #define CKM_IDEA_MAC                   0x00000343
  780. #define CKM_IDEA_MAC_GENERAL           0x00000344
  781. #define CKM_IDEA_CBC_PAD               0x00000345
  782. #define CKM_GENERIC_SECRET_KEY_GEN     0x00000350
  783. #define CKM_CONCATENATE_BASE_AND_KEY   0x00000360
  784. #define CKM_CONCATENATE_BASE_AND_DATA  0x00000362
  785. #define CKM_CONCATENATE_DATA_AND_BASE  0x00000363
  786. #define CKM_XOR_BASE_AND_DATA          0x00000364
  787. #define CKM_EXTRACT_KEY_FROM_KEY       0x00000365
  788. #define CKM_SSL3_PRE_MASTER_KEY_GEN    0x00000370
  789. #define CKM_SSL3_MASTER_KEY_DERIVE     0x00000371
  790. #define CKM_SSL3_KEY_AND_MAC_DERIVE    0x00000372
  791.  
  792. /* CKM_SSL3_MASTER_KEY_DERIVE_DH, CKM_TLS_PRE_MASTER_KEY_GEN,
  793.  * CKM_TLS_MASTER_KEY_DERIVE, CKM_TLS_KEY_AND_MAC_DERIVE, and
  794.  * CKM_TLS_MASTER_KEY_DERIVE_DH are new for v2.11 */
  795. #define CKM_SSL3_MASTER_KEY_DERIVE_DH  0x00000373
  796. #define CKM_TLS_PRE_MASTER_KEY_GEN     0x00000374
  797. #define CKM_TLS_MASTER_KEY_DERIVE      0x00000375
  798. #define CKM_TLS_KEY_AND_MAC_DERIVE     0x00000376
  799. #define CKM_TLS_MASTER_KEY_DERIVE_DH   0x00000377
  800.  
  801. /* CKM_TLS_PRF is new for v2.20 */
  802. #define CKM_TLS_PRF                    0x00000378
  803.  
  804. #define CKM_SSL3_MD5_MAC               0x00000380
  805. #define CKM_SSL3_SHA1_MAC              0x00000381
  806. #define CKM_MD5_KEY_DERIVATION         0x00000390
  807. #define CKM_MD2_KEY_DERIVATION         0x00000391
  808. #define CKM_SHA1_KEY_DERIVATION        0x00000392
  809.  
  810. /* CKM_SHA256/384/512 are new for v2.20 */
  811. #define CKM_SHA256_KEY_DERIVATION      0x00000393
  812. #define CKM_SHA384_KEY_DERIVATION      0x00000394
  813. #define CKM_SHA512_KEY_DERIVATION      0x00000395
  814.  
  815. #define CKM_PBE_MD2_DES_CBC            0x000003A0
  816. #define CKM_PBE_MD5_DES_CBC            0x000003A1
  817. #define CKM_PBE_MD5_CAST_CBC           0x000003A2
  818. #define CKM_PBE_MD5_CAST3_CBC          0x000003A3
  819. #define CKM_PBE_MD5_CAST5_CBC          0x000003A4
  820. #define CKM_PBE_MD5_CAST128_CBC        0x000003A4
  821. #define CKM_PBE_SHA1_CAST5_CBC         0x000003A5
  822. #define CKM_PBE_SHA1_CAST128_CBC       0x000003A5
  823. #define CKM_PBE_SHA1_RC4_128           0x000003A6
  824. #define CKM_PBE_SHA1_RC4_40            0x000003A7
  825. #define CKM_PBE_SHA1_DES3_EDE_CBC      0x000003A8
  826. #define CKM_PBE_SHA1_DES2_EDE_CBC      0x000003A9
  827. #define CKM_PBE_SHA1_RC2_128_CBC       0x000003AA
  828. #define CKM_PBE_SHA1_RC2_40_CBC        0x000003AB
  829.  
  830. /* CKM_PKCS5_PBKD2 is new for v2.10 */
  831. #define CKM_PKCS5_PBKD2                0x000003B0
  832.  
  833. #define CKM_PBA_SHA1_WITH_SHA1_HMAC    0x000003C0
  834.  
  835. /* WTLS mechanisms are new for v2.20 */
  836. #define CKM_WTLS_PRE_MASTER_KEY_GEN         0x000003D0
  837. #define CKM_WTLS_MASTER_KEY_DERIVE          0x000003D1
  838. #define CKM_WTLS_MASTER_KEY_DERIVE_DH_ECC   0x000003D2
  839. #define CKM_WTLS_PRF                        0x000003D3
  840. #define CKM_WTLS_SERVER_KEY_AND_MAC_DERIVE  0x000003D4
  841. #define CKM_WTLS_CLIENT_KEY_AND_MAC_DERIVE  0x000003D5
  842.  
  843. #define CKM_KEY_WRAP_LYNKS             0x00000400
  844. #define CKM_KEY_WRAP_SET_OAEP          0x00000401
  845.  
  846. /* CKM_CMS_SIG is new for v2.20 */
  847. #define CKM_CMS_SIG                    0x00000500
  848.  
  849. /* Fortezza mechanisms */
  850. #define CKM_SKIPJACK_KEY_GEN           0x00001000
  851. #define CKM_SKIPJACK_ECB64             0x00001001
  852. #define CKM_SKIPJACK_CBC64             0x00001002
  853. #define CKM_SKIPJACK_OFB64             0x00001003
  854. #define CKM_SKIPJACK_CFB64             0x00001004
  855. #define CKM_SKIPJACK_CFB32             0x00001005
  856. #define CKM_SKIPJACK_CFB16             0x00001006
  857. #define CKM_SKIPJACK_CFB8              0x00001007
  858. #define CKM_SKIPJACK_WRAP              0x00001008
  859. #define CKM_SKIPJACK_PRIVATE_WRAP      0x00001009
  860. #define CKM_SKIPJACK_RELAYX            0x0000100a
  861. #define CKM_KEA_KEY_PAIR_GEN           0x00001010
  862. #define CKM_KEA_KEY_DERIVE             0x00001011
  863. #define CKM_FORTEZZA_TIMESTAMP         0x00001020
  864. #define CKM_BATON_KEY_GEN              0x00001030
  865. #define CKM_BATON_ECB128               0x00001031
  866. #define CKM_BATON_ECB96                0x00001032
  867. #define CKM_BATON_CBC128               0x00001033
  868. #define CKM_BATON_COUNTER              0x00001034
  869. #define CKM_BATON_SHUFFLE              0x00001035
  870. #define CKM_BATON_WRAP                 0x00001036
  871.  
  872. /* CKM_ECDSA_KEY_PAIR_GEN is deprecated in v2.11,
  873.  * CKM_EC_KEY_PAIR_GEN is preferred */
  874. #define CKM_ECDSA_KEY_PAIR_GEN         0x00001040
  875. #define CKM_EC_KEY_PAIR_GEN            0x00001040
  876.  
  877. #define CKM_ECDSA                      0x00001041
  878. #define CKM_ECDSA_SHA1                 0x00001042
  879.  
  880. /* CKM_ECDH1_DERIVE, CKM_ECDH1_COFACTOR_DERIVE, and CKM_ECMQV_DERIVE
  881.  * are new for v2.11 */
  882. #define CKM_ECDH1_DERIVE               0x00001050
  883. #define CKM_ECDH1_COFACTOR_DERIVE      0x00001051
  884. #define CKM_ECMQV_DERIVE               0x00001052
  885.  
  886. #define CKM_JUNIPER_KEY_GEN            0x00001060
  887. #define CKM_JUNIPER_ECB128             0x00001061
  888. #define CKM_JUNIPER_CBC128             0x00001062
  889. #define CKM_JUNIPER_COUNTER            0x00001063
  890. #define CKM_JUNIPER_SHUFFLE            0x00001064
  891. #define CKM_JUNIPER_WRAP               0x00001065
  892. #define CKM_FASTHASH                   0x00001070
  893.  
  894. /* CKM_AES_KEY_GEN, CKM_AES_ECB, CKM_AES_CBC, CKM_AES_MAC,
  895.  * CKM_AES_MAC_GENERAL, CKM_AES_CBC_PAD, CKM_DSA_PARAMETER_GEN,
  896.  * CKM_DH_PKCS_PARAMETER_GEN, and CKM_X9_42_DH_PARAMETER_GEN are
  897.  * new for v2.11 */
  898. #define CKM_AES_KEY_GEN                0x00001080
  899. #define CKM_AES_ECB                    0x00001081
  900. #define CKM_AES_CBC                    0x00001082
  901. #define CKM_AES_MAC                    0x00001083
  902. #define CKM_AES_MAC_GENERAL            0x00001084
  903. #define CKM_AES_CBC_PAD                0x00001085
  904.  
  905. /* BlowFish and TwoFish are new for v2.20 */
  906. #define CKM_BLOWFISH_KEY_GEN           0x00001090
  907. #define CKM_BLOWFISH_CBC               0x00001091
  908. #define CKM_TWOFISH_KEY_GEN            0x00001092
  909. #define CKM_TWOFISH_CBC                0x00001093
  910.  
  911.  
  912. /* CKM_xxx_ENCRYPT_DATA mechanisms are new for v2.20 */
  913. #define CKM_DES_ECB_ENCRYPT_DATA       0x00001100
  914. #define CKM_DES_CBC_ENCRYPT_DATA       0x00001101
  915. #define CKM_DES3_ECB_ENCRYPT_DATA      0x00001102
  916. #define CKM_DES3_CBC_ENCRYPT_DATA      0x00001103
  917. #define CKM_AES_ECB_ENCRYPT_DATA       0x00001104
  918. #define CKM_AES_CBC_ENCRYPT_DATA       0x00001105
  919.  
  920. #define CKM_DSA_PARAMETER_GEN          0x00002000
  921. #define CKM_DH_PKCS_PARAMETER_GEN      0x00002001
  922. #define CKM_X9_42_DH_PARAMETER_GEN     0x00002002
  923.  
  924. #define CKM_VENDOR_DEFINED             0x80000000
  925.  
  926. typedef CK_MECHANISM_TYPE CK_PTR CK_MECHANISM_TYPE_PTR;
  927.  
  928.  
  929. /* CK_MECHANISM is a structure that specifies a particular
  930.  * mechanism  */
  931. typedef struct CK_MECHANISM {
  932.   CK_MECHANISM_TYPE mechanism;
  933.   CK_VOID_PTR       pParameter;
  934.  
  935.   /* ulParameterLen was changed from CK_USHORT to CK_ULONG for
  936.    * v2.0 */
  937.   CK_ULONG          ulParameterLen;  /* in bytes */
  938. } CK_MECHANISM;
  939.  
  940. typedef CK_MECHANISM CK_PTR CK_MECHANISM_PTR;
  941.  
  942.  
  943. /* CK_MECHANISM_INFO provides information about a particular
  944.  * mechanism */
  945. typedef struct CK_MECHANISM_INFO {
  946.     CK_ULONG    ulMinKeySize;
  947.     CK_ULONG    ulMaxKeySize;
  948.     CK_FLAGS    flags;
  949. } CK_MECHANISM_INFO;
  950.  
  951. /* The flags are defined as follows:
  952.  *      Bit Flag               Mask        Meaning */
  953. #define CKF_HW                 0x00000001  /* performed by HW */
  954.  
  955. /* The flags CKF_ENCRYPT, CKF_DECRYPT, CKF_DIGEST, CKF_SIGN,
  956.  * CKG_SIGN_RECOVER, CKF_VERIFY, CKF_VERIFY_RECOVER,
  957.  * CKF_GENERATE, CKF_GENERATE_KEY_PAIR, CKF_WRAP, CKF_UNWRAP,
  958.  * and CKF_DERIVE are new for v2.0.  They specify whether or not
  959.  * a mechanism can be used for a particular task */
  960. #define CKF_ENCRYPT            0x00000100
  961. #define CKF_DECRYPT            0x00000200
  962. #define CKF_DIGEST             0x00000400
  963. #define CKF_SIGN               0x00000800
  964. #define CKF_SIGN_RECOVER       0x00001000
  965. #define CKF_VERIFY             0x00002000
  966. #define CKF_VERIFY_RECOVER     0x00004000
  967. #define CKF_GENERATE           0x00008000
  968. #define CKF_GENERATE_KEY_PAIR  0x00010000
  969. #define CKF_WRAP               0x00020000
  970. #define CKF_UNWRAP             0x00040000
  971. #define CKF_DERIVE             0x00080000
  972.  
  973. /* CKF_EC_F_P, CKF_EC_F_2M, CKF_EC_ECPARAMETERS, CKF_EC_NAMEDCURVE,
  974.  * CKF_EC_UNCOMPRESS, and CKF_EC_COMPRESS are new for v2.11. They
  975.  * describe a token's EC capabilities not available in mechanism
  976.  * information. */
  977. #define CKF_EC_F_P             0x00100000
  978. #define CKF_EC_F_2M            0x00200000
  979. #define CKF_EC_ECPARAMETERS    0x00400000
  980. #define CKF_EC_NAMEDCURVE      0x00800000
  981. #define CKF_EC_UNCOMPRESS      0x01000000
  982. #define CKF_EC_COMPRESS        0x02000000
  983.  
  984. #define CKF_EXTENSION          0x80000000 /* FALSE for this version */
  985.  
  986. typedef CK_MECHANISM_INFO CK_PTR CK_MECHANISM_INFO_PTR;
  987.  
  988.  
  989. /* CK_RV is a value that identifies the return value of a
  990.  * PKCS #11 function */
  991. /* CK_RV was changed from CK_USHORT to CK_ULONG for v2.0 */
  992. typedef CK_ULONG          CK_RV;
  993.  
  994. #define CKR_OK                                0x00000000
  995. #define CKR_CANCEL                            0x00000001
  996. #define CKR_HOST_MEMORY                       0x00000002
  997. #define CKR_SLOT_ID_INVALID                   0x00000003
  998.  
  999. /* CKR_FLAGS_INVALID was removed for v2.0 */
  1000.  
  1001. /* CKR_GENERAL_ERROR and CKR_FUNCTION_FAILED are new for v2.0 */
  1002. #define CKR_GENERAL_ERROR                     0x00000005
  1003. #define CKR_FUNCTION_FAILED                   0x00000006
  1004.  
  1005. /* CKR_ARGUMENTS_BAD, CKR_NO_EVENT, CKR_NEED_TO_CREATE_THREADS,
  1006.  * and CKR_CANT_LOCK are new for v2.01 */
  1007. #define CKR_ARGUMENTS_BAD                     0x00000007
  1008. #define CKR_NO_EVENT                          0x00000008
  1009. #define CKR_NEED_TO_CREATE_THREADS            0x00000009
  1010. #define CKR_CANT_LOCK                         0x0000000A
  1011.  
  1012. #define CKR_ATTRIBUTE_READ_ONLY               0x00000010
  1013. #define CKR_ATTRIBUTE_SENSITIVE               0x00000011
  1014. #define CKR_ATTRIBUTE_TYPE_INVALID            0x00000012
  1015. #define CKR_ATTRIBUTE_VALUE_INVALID           0x00000013
  1016. #define CKR_DATA_INVALID                      0x00000020
  1017. #define CKR_DATA_LEN_RANGE                    0x00000021
  1018. #define CKR_DEVICE_ERROR                      0x00000030
  1019. #define CKR_DEVICE_MEMORY                     0x00000031
  1020. #define CKR_DEVICE_REMOVED                    0x00000032
  1021. #define CKR_ENCRYPTED_DATA_INVALID            0x00000040
  1022. #define CKR_ENCRYPTED_DATA_LEN_RANGE          0x00000041
  1023. #define CKR_FUNCTION_CANCELED                 0x00000050
  1024. #define CKR_FUNCTION_NOT_PARALLEL             0x00000051
  1025.  
  1026. /* CKR_FUNCTION_NOT_SUPPORTED is new for v2.0 */
  1027. #define CKR_FUNCTION_NOT_SUPPORTED            0x00000054
  1028.  
  1029. #define CKR_KEY_HANDLE_INVALID                0x00000060
  1030.  
  1031. /* CKR_KEY_SENSITIVE was removed for v2.0 */
  1032.  
  1033. #define CKR_KEY_SIZE_RANGE                    0x00000062
  1034. #define CKR_KEY_TYPE_INCONSISTENT             0x00000063
  1035.  
  1036. /* CKR_KEY_NOT_NEEDED, CKR_KEY_CHANGED, CKR_KEY_NEEDED,
  1037.  * CKR_KEY_INDIGESTIBLE, CKR_KEY_FUNCTION_NOT_PERMITTED,
  1038.  * CKR_KEY_NOT_WRAPPABLE, and CKR_KEY_UNEXTRACTABLE are new for
  1039.  * v2.0 */
  1040. #define CKR_KEY_NOT_NEEDED                    0x00000064
  1041. #define CKR_KEY_CHANGED                       0x00000065
  1042. #define CKR_KEY_NEEDED                        0x00000066
  1043. #define CKR_KEY_INDIGESTIBLE                  0x00000067
  1044. #define CKR_KEY_FUNCTION_NOT_PERMITTED        0x00000068
  1045. #define CKR_KEY_NOT_WRAPPABLE                 0x00000069
  1046. #define CKR_KEY_UNEXTRACTABLE                 0x0000006A
  1047.  
  1048. #define CKR_MECHANISM_INVALID                 0x00000070
  1049. #define CKR_MECHANISM_PARAM_INVALID           0x00000071
  1050.  
  1051. /* CKR_OBJECT_CLASS_INCONSISTENT and CKR_OBJECT_CLASS_INVALID
  1052.  * were removed for v2.0 */
  1053. #define CKR_OBJECT_HANDLE_INVALID             0x00000082
  1054. #define CKR_OPERATION_ACTIVE                  0x00000090
  1055. #define CKR_OPERATION_NOT_INITIALIZED         0x00000091
  1056. #define CKR_PIN_INCORRECT                     0x000000A0
  1057. #define CKR_PIN_INVALID                       0x000000A1
  1058. #define CKR_PIN_LEN_RANGE                     0x000000A2
  1059.  
  1060. /* CKR_PIN_EXPIRED and CKR_PIN_LOCKED are new for v2.0 */
  1061. #define CKR_PIN_EXPIRED                       0x000000A3
  1062. #define CKR_PIN_LOCKED                        0x000000A4
  1063.  
  1064. #define CKR_SESSION_CLOSED                    0x000000B0
  1065. #define CKR_SESSION_COUNT                     0x000000B1
  1066. #define CKR_SESSION_HANDLE_INVALID            0x000000B3
  1067. #define CKR_SESSION_PARALLEL_NOT_SUPPORTED    0x000000B4
  1068. #define CKR_SESSION_READ_ONLY                 0x000000B5
  1069. #define CKR_SESSION_EXISTS                    0x000000B6
  1070.  
  1071. /* CKR_SESSION_READ_ONLY_EXISTS and
  1072.  * CKR_SESSION_READ_WRITE_SO_EXISTS are new for v2.0 */
  1073. #define CKR_SESSION_READ_ONLY_EXISTS          0x000000B7
  1074. #define CKR_SESSION_READ_WRITE_SO_EXISTS      0x000000B8
  1075.  
  1076. #define CKR_SIGNATURE_INVALID                 0x000000C0
  1077. #define CKR_SIGNATURE_LEN_RANGE               0x000000C1
  1078. #define CKR_TEMPLATE_INCOMPLETE               0x000000D0
  1079. #define CKR_TEMPLATE_INCONSISTENT             0x000000D1
  1080. #define CKR_TOKEN_NOT_PRESENT                 0x000000E0
  1081. #define CKR_TOKEN_NOT_RECOGNIZED              0x000000E1
  1082. #define CKR_TOKEN_WRITE_PROTECTED             0x000000E2
  1083. #define CKR_UNWRAPPING_KEY_HANDLE_INVALID     0x000000F0
  1084. #define CKR_UNWRAPPING_KEY_SIZE_RANGE         0x000000F1
  1085. #define CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT  0x000000F2
  1086. #define CKR_USER_ALREADY_LOGGED_IN            0x00000100
  1087. #define CKR_USER_NOT_LOGGED_IN                0x00000101
  1088. #define CKR_USER_PIN_NOT_INITIALIZED          0x00000102
  1089. #define CKR_USER_TYPE_INVALID                 0x00000103
  1090.  
  1091. /* CKR_USER_ANOTHER_ALREADY_LOGGED_IN and CKR_USER_TOO_MANY_TYPES
  1092.  * are new to v2.01 */
  1093. #define CKR_USER_ANOTHER_ALREADY_LOGGED_IN    0x00000104
  1094. #define CKR_USER_TOO_MANY_TYPES               0x00000105
  1095.  
  1096. #define CKR_WRAPPED_KEY_INVALID               0x00000110
  1097. #define CKR_WRAPPED_KEY_LEN_RANGE             0x00000112
  1098. #define CKR_WRAPPING_KEY_HANDLE_INVALID       0x00000113
  1099. #define CKR_WRAPPING_KEY_SIZE_RANGE           0x00000114
  1100. #define CKR_WRAPPING_KEY_TYPE_INCONSISTENT    0x00000115
  1101. #define CKR_RANDOM_SEED_NOT_SUPPORTED         0x00000120
  1102.  
  1103. /* These are new to v2.0 */
  1104. #define CKR_RANDOM_NO_RNG                     0x00000121
  1105.  
  1106. /* These are new to v2.11 */
  1107. #define CKR_DOMAIN_PARAMS_INVALID             0x00000130
  1108.  
  1109. /* These are new to v2.0 */
  1110. #define CKR_BUFFER_TOO_SMALL                  0x00000150
  1111. #define CKR_SAVED_STATE_INVALID               0x00000160
  1112. #define CKR_INFORMATION_SENSITIVE             0x00000170
  1113. #define CKR_STATE_UNSAVEABLE                  0x00000180
  1114.  
  1115. /* These are new to v2.01 */
  1116. #define CKR_CRYPTOKI_NOT_INITIALIZED          0x00000190
  1117. #define CKR_CRYPTOKI_ALREADY_INITIALIZED      0x00000191
  1118. #define CKR_MUTEX_BAD                         0x000001A0
  1119. #define CKR_MUTEX_NOT_LOCKED                  0x000001A1
  1120.  
  1121. /* This is new to v2.20 */
  1122. #define CKR_FUNCTION_REJECTED                 0x00000200
  1123.  
  1124. #define CKR_VENDOR_DEFINED                    0x80000000
  1125.  
  1126.  
  1127. /* CK_NOTIFY is an application callback that processes events */
  1128. typedef CK_CALLBACK_FUNCTION(CK_RV, CK_NOTIFY)(
  1129.   CK_SESSION_HANDLE hSession,     /* the session's handle */
  1130.   CK_NOTIFICATION   event,
  1131.   CK_VOID_PTR       pApplication  /* passed to C_OpenSession */
  1132. );
  1133.  
  1134.  
  1135. /* CK_FUNCTION_LIST is a structure holding a PKCS #11 spec
  1136.  * version and pointers of appropriate types to all the
  1137.  * PKCS #11 functions */
  1138. /* CK_FUNCTION_LIST is new for v2.0 */
  1139. typedef struct CK_FUNCTION_LIST CK_FUNCTION_LIST;
  1140.  
  1141. typedef CK_FUNCTION_LIST CK_PTR CK_FUNCTION_LIST_PTR;
  1142.  
  1143. typedef CK_FUNCTION_LIST_PTR CK_PTR CK_FUNCTION_LIST_PTR_PTR;
  1144.  
  1145.  
  1146. /* CK_CREATEMUTEX is an application callback for creating a
  1147.  * mutex object */
  1148. typedef CK_CALLBACK_FUNCTION(CK_RV, CK_CREATEMUTEX)(
  1149.   CK_VOID_PTR_PTR ppMutex  /* location to receive ptr to mutex */
  1150. );
  1151.  
  1152.  
  1153. /* CK_DESTROYMUTEX is an application callback for destroying a
  1154.  * mutex object */
  1155. typedef CK_CALLBACK_FUNCTION(CK_RV, CK_DESTROYMUTEX)(
  1156.   CK_VOID_PTR pMutex  /* pointer to mutex */
  1157. );
  1158.  
  1159.  
  1160. /* CK_LOCKMUTEX is an application callback for locking a mutex */
  1161. typedef CK_CALLBACK_FUNCTION(CK_RV, CK_LOCKMUTEX)(
  1162.   CK_VOID_PTR pMutex  /* pointer to mutex */
  1163. );
  1164.  
  1165.  
  1166. /* CK_UNLOCKMUTEX is an application callback for unlocking a
  1167.  * mutex */
  1168. typedef CK_CALLBACK_FUNCTION(CK_RV, CK_UNLOCKMUTEX)(
  1169.   CK_VOID_PTR pMutex  /* pointer to mutex */
  1170. );
  1171.  
  1172.  
  1173. /* CK_C_INITIALIZE_ARGS provides the optional arguments to
  1174.  * C_Initialize */
  1175. typedef struct CK_C_INITIALIZE_ARGS {
  1176.   CK_CREATEMUTEX CreateMutex;
  1177.   CK_DESTROYMUTEX DestroyMutex;
  1178.   CK_LOCKMUTEX LockMutex;
  1179.   CK_UNLOCKMUTEX UnlockMutex;
  1180.   CK_FLAGS flags;
  1181.   /* The official PKCS #11 spec does not have a 'LibraryParameters' field, but
  1182.    * a reserved field. NSS needs a way to pass instance-specific information
  1183.    * to the library (like where to find its config files, etc). This
  1184.    * information is usually provided by the installer and passed uninterpreted
  1185.    * by NSS to the library, though NSS does know the specifics of the softoken
  1186.    * version of this parameter. Most compliant PKCS#11 modules expect this 
  1187.    * parameter to be NULL, and will return CKR_ARGUMENTS_BAD from
  1188.    * C_Initialize if Library parameters is supplied. */
  1189.   CK_CHAR_PTR *LibraryParameters;
  1190.   /* This field is only present if the LibraryParameters is not NULL. It must
  1191.    * be NULL in all cases */
  1192.   CK_VOID_PTR pReserved;
  1193. } CK_C_INITIALIZE_ARGS;
  1194.  
  1195. /* flags: bit flags that provide capabilities of the slot
  1196.  *      Bit Flag                           Mask       Meaning
  1197.  */
  1198. #define CKF_LIBRARY_CANT_CREATE_OS_THREADS 0x00000001
  1199. #define CKF_OS_LOCKING_OK                  0x00000002
  1200.  
  1201. typedef CK_C_INITIALIZE_ARGS CK_PTR CK_C_INITIALIZE_ARGS_PTR;
  1202.  
  1203.  
  1204. /* additional flags for parameters to functions */
  1205.  
  1206. /* CKF_DONT_BLOCK is for the function C_WaitForSlotEvent */
  1207. #define CKF_DONT_BLOCK     1
  1208.  
  1209. /* CK_RSA_PKCS_OAEP_MGF_TYPE is new for v2.10.
  1210.  * CK_RSA_PKCS_OAEP_MGF_TYPE  is used to indicate the Message
  1211.  * Generation Function (MGF) applied to a message block when
  1212.  * formatting a message block for the PKCS #1 OAEP encryption
  1213.  * scheme. */
  1214. typedef CK_ULONG CK_RSA_PKCS_MGF_TYPE;
  1215.  
  1216. typedef CK_RSA_PKCS_MGF_TYPE CK_PTR CK_RSA_PKCS_MGF_TYPE_PTR;
  1217.  
  1218. /* The following MGFs are defined */
  1219. /* CKG_MGF1_SHA256, CKG_MGF1_SHA384, and CKG_MGF1_SHA512
  1220.  * are new for v2.20 */
  1221. #define CKG_MGF1_SHA1         0x00000001
  1222. #define CKG_MGF1_SHA256       0x00000002
  1223. #define CKG_MGF1_SHA384       0x00000003
  1224. #define CKG_MGF1_SHA512       0x00000004
  1225.  
  1226. /* CK_RSA_PKCS_OAEP_SOURCE_TYPE is new for v2.10.
  1227.  * CK_RSA_PKCS_OAEP_SOURCE_TYPE  is used to indicate the source
  1228.  * of the encoding parameter when formatting a message block
  1229.  * for the PKCS #1 OAEP encryption scheme. */
  1230. typedef CK_ULONG CK_RSA_PKCS_OAEP_SOURCE_TYPE;
  1231.  
  1232. typedef CK_RSA_PKCS_OAEP_SOURCE_TYPE CK_PTR CK_RSA_PKCS_OAEP_SOURCE_TYPE_PTR;
  1233.  
  1234. /* The following encoding parameter sources are defined */
  1235. #define CKZ_DATA_SPECIFIED    0x00000001
  1236.  
  1237. /* CK_RSA_PKCS_OAEP_PARAMS is new for v2.10.
  1238.  * CK_RSA_PKCS_OAEP_PARAMS provides the parameters to the
  1239.  * CKM_RSA_PKCS_OAEP mechanism. */
  1240. typedef struct CK_RSA_PKCS_OAEP_PARAMS {
  1241.         CK_MECHANISM_TYPE hashAlg;
  1242.         CK_RSA_PKCS_MGF_TYPE mgf;
  1243.         CK_RSA_PKCS_OAEP_SOURCE_TYPE source;
  1244.         CK_VOID_PTR pSourceData;
  1245.         CK_ULONG ulSourceDataLen;
  1246. } CK_RSA_PKCS_OAEP_PARAMS;
  1247.  
  1248. typedef CK_RSA_PKCS_OAEP_PARAMS CK_PTR CK_RSA_PKCS_OAEP_PARAMS_PTR;
  1249.  
  1250. /* CK_RSA_PKCS_PSS_PARAMS is new for v2.11.
  1251.  * CK_RSA_PKCS_PSS_PARAMS provides the parameters to the
  1252.  * CKM_RSA_PKCS_PSS mechanism(s). */
  1253. typedef struct CK_RSA_PKCS_PSS_PARAMS {
  1254.         CK_MECHANISM_TYPE    hashAlg;
  1255.         CK_RSA_PKCS_MGF_TYPE mgf;
  1256.         CK_ULONG             sLen;
  1257. } CK_RSA_PKCS_PSS_PARAMS;
  1258.  
  1259. typedef CK_RSA_PKCS_PSS_PARAMS CK_PTR CK_RSA_PKCS_PSS_PARAMS_PTR;
  1260.  
  1261. /* CK_EC_KDF_TYPE is new for v2.11. */
  1262. typedef CK_ULONG CK_EC_KDF_TYPE;
  1263.  
  1264. /* The following EC Key Derivation Functions are defined */
  1265. #define CKD_NULL                 0x00000001
  1266. #define CKD_SHA1_KDF             0x00000002
  1267.  
  1268. /* CK_ECDH1_DERIVE_PARAMS is new for v2.11.
  1269.  * CK_ECDH1_DERIVE_PARAMS provides the parameters to the
  1270.  * CKM_ECDH1_DERIVE and CKM_ECDH1_COFACTOR_DERIVE mechanisms,
  1271.  * where each party contributes one key pair.
  1272.  */
  1273. typedef struct CK_ECDH1_DERIVE_PARAMS {
  1274.   CK_EC_KDF_TYPE kdf;
  1275.   CK_ULONG ulSharedDataLen;
  1276.   CK_BYTE_PTR pSharedData;
  1277.   CK_ULONG ulPublicDataLen;
  1278.   CK_BYTE_PTR pPublicData;
  1279. } CK_ECDH1_DERIVE_PARAMS;
  1280.  
  1281. typedef CK_ECDH1_DERIVE_PARAMS CK_PTR CK_ECDH1_DERIVE_PARAMS_PTR;
  1282.  
  1283.  
  1284. /* CK_ECDH2_DERIVE_PARAMS is new for v2.11.
  1285.  * CK_ECDH2_DERIVE_PARAMS provides the parameters to the
  1286.  * CKM_ECMQV_DERIVE mechanism, where each party contributes two key pairs. */
  1287. typedef struct CK_ECDH2_DERIVE_PARAMS {
  1288.   CK_EC_KDF_TYPE kdf;
  1289.   CK_ULONG ulSharedDataLen;
  1290.   CK_BYTE_PTR pSharedData;
  1291.   CK_ULONG ulPublicDataLen;
  1292.   CK_BYTE_PTR pPublicData;
  1293.   CK_ULONG ulPrivateDataLen;
  1294.   CK_OBJECT_HANDLE hPrivateData;
  1295.   CK_ULONG ulPublicDataLen2;
  1296.   CK_BYTE_PTR pPublicData2;
  1297. } CK_ECDH2_DERIVE_PARAMS;
  1298.  
  1299. typedef CK_ECDH2_DERIVE_PARAMS CK_PTR CK_ECDH2_DERIVE_PARAMS_PTR;
  1300.  
  1301. typedef struct CK_ECMQV_DERIVE_PARAMS {
  1302.   CK_EC_KDF_TYPE kdf;
  1303.   CK_ULONG ulSharedDataLen;
  1304.   CK_BYTE_PTR pSharedData;
  1305.   CK_ULONG ulPublicDataLen;
  1306.   CK_BYTE_PTR pPublicData;
  1307.   CK_ULONG ulPrivateDataLen;
  1308.   CK_OBJECT_HANDLE hPrivateData;
  1309.   CK_ULONG ulPublicDataLen2;
  1310.   CK_BYTE_PTR pPublicData2;
  1311.   CK_OBJECT_HANDLE publicKey;
  1312. } CK_ECMQV_DERIVE_PARAMS;
  1313.  
  1314. typedef CK_ECMQV_DERIVE_PARAMS CK_PTR CK_ECMQV_DERIVE_PARAMS_PTR;
  1315.  
  1316. /* Typedefs and defines for the CKM_X9_42_DH_KEY_PAIR_GEN and the
  1317.  * CKM_X9_42_DH_PARAMETER_GEN mechanisms (new for PKCS #11 v2.11) */
  1318. typedef CK_ULONG CK_X9_42_DH_KDF_TYPE;
  1319. typedef CK_X9_42_DH_KDF_TYPE CK_PTR CK_X9_42_DH_KDF_TYPE_PTR;
  1320.  
  1321. /* The following X9.42 DH key derivation functions are defined
  1322.    (besides CKD_NULL already defined : */
  1323. #define CKD_SHA1_KDF_ASN1        0x00000003
  1324. #define CKD_SHA1_KDF_CONCATENATE 0x00000004
  1325.  
  1326. /* CK_X9_42_DH1_DERIVE_PARAMS is new for v2.11.
  1327.  * CK_X9_42_DH1_DERIVE_PARAMS provides the parameters to the
  1328.  * CKM_X9_42_DH_DERIVE key derivation mechanism, where each party
  1329.  * contributes one key pair */
  1330. typedef struct CK_X9_42_DH1_DERIVE_PARAMS {
  1331.   CK_X9_42_DH_KDF_TYPE kdf;
  1332.   CK_ULONG ulOtherInfoLen;
  1333.   CK_BYTE_PTR pOtherInfo;
  1334.   CK_ULONG ulPublicDataLen;
  1335.   CK_BYTE_PTR pPublicData;
  1336. } CK_X9_42_DH1_DERIVE_PARAMS;
  1337.  
  1338. typedef struct CK_X9_42_DH1_DERIVE_PARAMS CK_PTR CK_X9_42_DH1_DERIVE_PARAMS_PTR;
  1339.  
  1340. /* CK_X9_42_DH2_DERIVE_PARAMS is new for v2.11.
  1341.  * CK_X9_42_DH2_DERIVE_PARAMS provides the parameters to the
  1342.  * CKM_X9_42_DH_HYBRID_DERIVE and CKM_X9_42_MQV_DERIVE key derivation
  1343.  * mechanisms, where each party contributes two key pairs */
  1344. typedef struct CK_X9_42_DH2_DERIVE_PARAMS {
  1345.   CK_X9_42_DH_KDF_TYPE kdf;
  1346.   CK_ULONG ulOtherInfoLen;
  1347.   CK_BYTE_PTR pOtherInfo;
  1348.   CK_ULONG ulPublicDataLen;
  1349.   CK_BYTE_PTR pPublicData;
  1350.   CK_ULONG ulPrivateDataLen;
  1351.   CK_OBJECT_HANDLE hPrivateData;
  1352.   CK_ULONG ulPublicDataLen2;
  1353.   CK_BYTE_PTR pPublicData2;
  1354. } CK_X9_42_DH2_DERIVE_PARAMS;
  1355.  
  1356. typedef CK_X9_42_DH2_DERIVE_PARAMS CK_PTR CK_X9_42_DH2_DERIVE_PARAMS_PTR;
  1357.  
  1358. typedef struct CK_X9_42_MQV_DERIVE_PARAMS {
  1359.   CK_X9_42_DH_KDF_TYPE kdf;
  1360.   CK_ULONG ulOtherInfoLen;
  1361.   CK_BYTE_PTR pOtherInfo;
  1362.   CK_ULONG ulPublicDataLen;
  1363.   CK_BYTE_PTR pPublicData;
  1364.   CK_ULONG ulPrivateDataLen;
  1365.   CK_OBJECT_HANDLE hPrivateData;
  1366.   CK_ULONG ulPublicDataLen2;
  1367.   CK_BYTE_PTR pPublicData2;
  1368.   CK_OBJECT_HANDLE publicKey;
  1369. } CK_X9_42_MQV_DERIVE_PARAMS;
  1370.  
  1371. typedef CK_X9_42_MQV_DERIVE_PARAMS CK_PTR CK_X9_42_MQV_DERIVE_PARAMS_PTR;
  1372.  
  1373. /* CK_KEA_DERIVE_PARAMS provides the parameters to the
  1374.  * CKM_KEA_DERIVE mechanism */
  1375. /* CK_KEA_DERIVE_PARAMS is new for v2.0 */
  1376. typedef struct CK_KEA_DERIVE_PARAMS {
  1377.   CK_BBOOL      isSender;
  1378.   CK_ULONG      ulRandomLen;
  1379.   CK_BYTE_PTR   pRandomA;
  1380.   CK_BYTE_PTR   pRandomB;
  1381.   CK_ULONG      ulPublicDataLen;
  1382.   CK_BYTE_PTR   pPublicData;
  1383. } CK_KEA_DERIVE_PARAMS;
  1384.  
  1385. typedef CK_KEA_DERIVE_PARAMS CK_PTR CK_KEA_DERIVE_PARAMS_PTR;
  1386.  
  1387.  
  1388. /* CK_RC2_PARAMS provides the parameters to the CKM_RC2_ECB and
  1389.  * CKM_RC2_MAC mechanisms.  An instance of CK_RC2_PARAMS just
  1390.  * holds the effective keysize */
  1391. typedef CK_ULONG          CK_RC2_PARAMS;
  1392.  
  1393. typedef CK_RC2_PARAMS CK_PTR CK_RC2_PARAMS_PTR;
  1394.  
  1395.  
  1396. /* CK_RC2_CBC_PARAMS provides the parameters to the CKM_RC2_CBC
  1397.  * mechanism */
  1398. typedef struct CK_RC2_CBC_PARAMS {
  1399.   /* ulEffectiveBits was changed from CK_USHORT to CK_ULONG for
  1400.    * v2.0 */
  1401.   CK_ULONG      ulEffectiveBits;  /* effective bits (1-1024) */
  1402.  
  1403.   CK_BYTE       iv[8];            /* IV for CBC mode */
  1404. } CK_RC2_CBC_PARAMS;
  1405.  
  1406. typedef CK_RC2_CBC_PARAMS CK_PTR CK_RC2_CBC_PARAMS_PTR;
  1407.  
  1408.  
  1409. /* CK_RC2_MAC_GENERAL_PARAMS provides the parameters for the
  1410.  * CKM_RC2_MAC_GENERAL mechanism */
  1411. /* CK_RC2_MAC_GENERAL_PARAMS is new for v2.0 */
  1412. typedef struct CK_RC2_MAC_GENERAL_PARAMS {
  1413.   CK_ULONG      ulEffectiveBits;  /* effective bits (1-1024) */
  1414.   CK_ULONG      ulMacLength;      /* Length of MAC in bytes */
  1415. } CK_RC2_MAC_GENERAL_PARAMS;
  1416.  
  1417. typedef CK_RC2_MAC_GENERAL_PARAMS CK_PTR \
  1418.   CK_RC2_MAC_GENERAL_PARAMS_PTR;
  1419.  
  1420.  
  1421. /* CK_RC5_PARAMS provides the parameters to the CKM_RC5_ECB and
  1422.  * CKM_RC5_MAC mechanisms */
  1423. /* CK_RC5_PARAMS is new for v2.0 */
  1424. typedef struct CK_RC5_PARAMS {
  1425.   CK_ULONG      ulWordsize;  /* wordsize in bits */
  1426.   CK_ULONG      ulRounds;    /* number of rounds */
  1427. } CK_RC5_PARAMS;
  1428.  
  1429. typedef CK_RC5_PARAMS CK_PTR CK_RC5_PARAMS_PTR;
  1430.  
  1431.  
  1432. /* CK_RC5_CBC_PARAMS provides the parameters to the CKM_RC5_CBC
  1433.  * mechanism */
  1434. /* CK_RC5_CBC_PARAMS is new for v2.0 */
  1435. typedef struct CK_RC5_CBC_PARAMS {
  1436.   CK_ULONG      ulWordsize;  /* wordsize in bits */
  1437.   CK_ULONG      ulRounds;    /* number of rounds */
  1438.   CK_BYTE_PTR   pIv;         /* pointer to IV */
  1439.   CK_ULONG      ulIvLen;     /* length of IV in bytes */
  1440. } CK_RC5_CBC_PARAMS;
  1441.  
  1442. typedef CK_RC5_CBC_PARAMS CK_PTR CK_RC5_CBC_PARAMS_PTR;
  1443.  
  1444.  
  1445. /* CK_RC5_MAC_GENERAL_PARAMS provides the parameters for the
  1446.  * CKM_RC5_MAC_GENERAL mechanism */
  1447. /* CK_RC5_MAC_GENERAL_PARAMS is new for v2.0 */
  1448. typedef struct CK_RC5_MAC_GENERAL_PARAMS {
  1449.   CK_ULONG      ulWordsize;   /* wordsize in bits */
  1450.   CK_ULONG      ulRounds;     /* number of rounds */
  1451.   CK_ULONG      ulMacLength;  /* Length of MAC in bytes */
  1452. } CK_RC5_MAC_GENERAL_PARAMS;
  1453.  
  1454. typedef CK_RC5_MAC_GENERAL_PARAMS CK_PTR \
  1455.   CK_RC5_MAC_GENERAL_PARAMS_PTR;
  1456.  
  1457.  
  1458. /* CK_MAC_GENERAL_PARAMS provides the parameters to most block
  1459.  * ciphers' MAC_GENERAL mechanisms.  Its value is the length of
  1460.  * the MAC */
  1461. /* CK_MAC_GENERAL_PARAMS is new for v2.0 */
  1462. typedef CK_ULONG          CK_MAC_GENERAL_PARAMS;
  1463.  
  1464. typedef CK_MAC_GENERAL_PARAMS CK_PTR CK_MAC_GENERAL_PARAMS_PTR;
  1465.  
  1466. /* CK_DES/AES_ECB/CBC_ENCRYPT_DATA_PARAMS are new for v2.20 */
  1467. typedef struct CK_DES_CBC_ENCRYPT_DATA_PARAMS {
  1468.   CK_BYTE      iv[8];
  1469.   CK_BYTE_PTR  pData;
  1470.   CK_ULONG     length;
  1471. } CK_DES_CBC_ENCRYPT_DATA_PARAMS;
  1472.  
  1473. typedef CK_DES_CBC_ENCRYPT_DATA_PARAMS CK_PTR CK_DES_CBC_ENCRYPT_DATA_PARAMS_PTR;
  1474.  
  1475. typedef struct CK_AES_CBC_ENCRYPT_DATA_PARAMS {
  1476.   CK_BYTE      iv[16];
  1477.   CK_BYTE_PTR  pData;
  1478.   CK_ULONG     length;
  1479. } CK_AES_CBC_ENCRYPT_DATA_PARAMS;
  1480.  
  1481. typedef CK_AES_CBC_ENCRYPT_DATA_PARAMS CK_PTR CK_AES_CBC_ENCRYPT_DATA_PARAMS_PTR;
  1482.  
  1483. /* CK_SKIPJACK_PRIVATE_WRAP_PARAMS provides the parameters to the
  1484.  * CKM_SKIPJACK_PRIVATE_WRAP mechanism */
  1485. /* CK_SKIPJACK_PRIVATE_WRAP_PARAMS is new for v2.0 */
  1486. typedef struct CK_SKIPJACK_PRIVATE_WRAP_PARAMS {
  1487.   CK_ULONG      ulPasswordLen;
  1488.   CK_BYTE_PTR   pPassword;
  1489.   CK_ULONG      ulPublicDataLen;
  1490.   CK_BYTE_PTR   pPublicData;
  1491.   CK_ULONG      ulPAndGLen;
  1492.   CK_ULONG      ulQLen;
  1493.   CK_ULONG      ulRandomLen;
  1494.   CK_BYTE_PTR   pRandomA;
  1495.   CK_BYTE_PTR   pPrimeP;
  1496.   CK_BYTE_PTR   pBaseG;
  1497.   CK_BYTE_PTR   pSubprimeQ;
  1498. } CK_SKIPJACK_PRIVATE_WRAP_PARAMS;
  1499.  
  1500. typedef CK_SKIPJACK_PRIVATE_WRAP_PARAMS CK_PTR \
  1501.   CK_SKIPJACK_PRIVATE_WRAP_PTR;
  1502.  
  1503.  
  1504. /* CK_SKIPJACK_RELAYX_PARAMS provides the parameters to the
  1505.  * CKM_SKIPJACK_RELAYX mechanism */
  1506. /* CK_SKIPJACK_RELAYX_PARAMS is new for v2.0 */
  1507. typedef struct CK_SKIPJACK_RELAYX_PARAMS {
  1508.   CK_ULONG      ulOldWrappedXLen;
  1509.   CK_BYTE_PTR   pOldWrappedX;
  1510.   CK_ULONG      ulOldPasswordLen;
  1511.   CK_BYTE_PTR   pOldPassword;
  1512.   CK_ULONG      ulOldPublicDataLen;
  1513.   CK_BYTE_PTR   pOldPublicData;
  1514.   CK_ULONG      ulOldRandomLen;
  1515.   CK_BYTE_PTR   pOldRandomA;
  1516.   CK_ULONG      ulNewPasswordLen;
  1517.   CK_BYTE_PTR   pNewPassword;
  1518.   CK_ULONG      ulNewPublicDataLen;
  1519.   CK_BYTE_PTR   pNewPublicData;
  1520.   CK_ULONG      ulNewRandomLen;
  1521.   CK_BYTE_PTR   pNewRandomA;
  1522. } CK_SKIPJACK_RELAYX_PARAMS;
  1523.  
  1524. typedef CK_SKIPJACK_RELAYX_PARAMS CK_PTR \
  1525.   CK_SKIPJACK_RELAYX_PARAMS_PTR;
  1526.  
  1527.  
  1528. typedef struct CK_PBE_PARAMS {
  1529.   CK_BYTE_PTR      pInitVector;
  1530.   CK_UTF8CHAR_PTR  pPassword;
  1531.   CK_ULONG         ulPasswordLen;
  1532.   CK_BYTE_PTR      pSalt;
  1533.   CK_ULONG         ulSaltLen;
  1534.   CK_ULONG         ulIteration;
  1535. } CK_PBE_PARAMS;
  1536.  
  1537. typedef CK_PBE_PARAMS CK_PTR CK_PBE_PARAMS_PTR;
  1538.  
  1539.  
  1540. /* CK_KEY_WRAP_SET_OAEP_PARAMS provides the parameters to the
  1541.  * CKM_KEY_WRAP_SET_OAEP mechanism */
  1542. /* CK_KEY_WRAP_SET_OAEP_PARAMS is new for v2.0 */
  1543. typedef struct CK_KEY_WRAP_SET_OAEP_PARAMS {
  1544.   CK_BYTE       bBC;     /* block contents byte */
  1545.   CK_BYTE_PTR   pX;      /* extra data */
  1546.   CK_ULONG      ulXLen;  /* length of extra data in bytes */
  1547. } CK_KEY_WRAP_SET_OAEP_PARAMS;
  1548.  
  1549. typedef CK_KEY_WRAP_SET_OAEP_PARAMS CK_PTR \
  1550.   CK_KEY_WRAP_SET_OAEP_PARAMS_PTR;
  1551.  
  1552.  
  1553. typedef struct CK_SSL3_RANDOM_DATA {
  1554.   CK_BYTE_PTR  pClientRandom;
  1555.   CK_ULONG     ulClientRandomLen;
  1556.   CK_BYTE_PTR  pServerRandom;
  1557.   CK_ULONG     ulServerRandomLen;
  1558. } CK_SSL3_RANDOM_DATA;
  1559.  
  1560.  
  1561. typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS {
  1562.   CK_SSL3_RANDOM_DATA RandomInfo;
  1563.   CK_VERSION_PTR pVersion;
  1564. } CK_SSL3_MASTER_KEY_DERIVE_PARAMS;
  1565.  
  1566. typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS CK_PTR \
  1567.   CK_SSL3_MASTER_KEY_DERIVE_PARAMS_PTR;
  1568.  
  1569.  
  1570. typedef struct CK_SSL3_KEY_MAT_OUT {
  1571.   CK_OBJECT_HANDLE hClientMacSecret;
  1572.   CK_OBJECT_HANDLE hServerMacSecret;
  1573.   CK_OBJECT_HANDLE hClientKey;
  1574.   CK_OBJECT_HANDLE hServerKey;
  1575.   CK_BYTE_PTR      pIVClient;
  1576.   CK_BYTE_PTR      pIVServer;
  1577. } CK_SSL3_KEY_MAT_OUT;
  1578.  
  1579. typedef CK_SSL3_KEY_MAT_OUT CK_PTR CK_SSL3_KEY_MAT_OUT_PTR;
  1580.  
  1581.  
  1582. typedef struct CK_SSL3_KEY_MAT_PARAMS {
  1583.   CK_ULONG                ulMacSizeInBits;
  1584.   CK_ULONG                ulKeySizeInBits;
  1585.   CK_ULONG                ulIVSizeInBits;
  1586.   CK_BBOOL                bIsExport;
  1587.   CK_SSL3_RANDOM_DATA     RandomInfo;
  1588.   CK_SSL3_KEY_MAT_OUT_PTR pReturnedKeyMaterial;
  1589. } CK_SSL3_KEY_MAT_PARAMS;
  1590.  
  1591. typedef CK_SSL3_KEY_MAT_PARAMS CK_PTR CK_SSL3_KEY_MAT_PARAMS_PTR;
  1592.  
  1593. /* CK_TLS_PRF_PARAMS is new for version 2.20 */
  1594. typedef struct CK_TLS_PRF_PARAMS {
  1595.   CK_BYTE_PTR  pSeed;
  1596.   CK_ULONG     ulSeedLen;
  1597.   CK_BYTE_PTR  pLabel;
  1598.   CK_ULONG     ulLabelLen;
  1599.   CK_BYTE_PTR  pOutput;
  1600.   CK_ULONG_PTR pulOutputLen;
  1601. } CK_TLS_PRF_PARAMS;
  1602.  
  1603. typedef CK_TLS_PRF_PARAMS CK_PTR CK_TLS_PRF_PARAMS_PTR;
  1604.  
  1605. /* WTLS is new for version 2.20 */
  1606. typedef struct CK_WTLS_RANDOM_DATA {
  1607.   CK_BYTE_PTR pClientRandom;
  1608.   CK_ULONG    ulClientRandomLen;
  1609.   CK_BYTE_PTR pServerRandom;
  1610.   CK_ULONG    ulServerRandomLen;
  1611. } CK_WTLS_RANDOM_DATA;
  1612.  
  1613. typedef CK_WTLS_RANDOM_DATA CK_PTR CK_WTLS_RANDOM_DATA_PTR;
  1614.  
  1615. typedef struct CK_WTLS_MASTER_KEY_DERIVE_PARAMS {
  1616.   CK_MECHANISM_TYPE   DigestMechanism;
  1617.   CK_WTLS_RANDOM_DATA RandomInfo;
  1618.   CK_BYTE_PTR         pVersion;
  1619. } CK_WTLS_MASTER_KEY_DERIVE_PARAMS;
  1620.  
  1621. typedef CK_WTLS_MASTER_KEY_DERIVE_PARAMS CK_PTR \
  1622.   CK_WTLS_MASTER_KEY_DERIVE_PARAMS_PTR;
  1623.  
  1624. typedef struct CK_WTLS_PRF_PARAMS {
  1625.   CK_MECHANISM_TYPE DigestMechanism;
  1626.   CK_BYTE_PTR       pSeed;
  1627.   CK_ULONG          ulSeedLen;
  1628.   CK_BYTE_PTR       pLabel;
  1629.   CK_ULONG          ulLabelLen;
  1630.   CK_BYTE_PTR       pOutput;
  1631.   CK_ULONG_PTR      pulOutputLen;
  1632. } CK_WTLS_PRF_PARAMS;
  1633.  
  1634. typedef CK_WTLS_PRF_PARAMS CK_PTR CK_WTLS_PRF_PARAMS_PTR;
  1635.  
  1636. typedef struct CK_WTLS_KEY_MAT_OUT {
  1637.   CK_OBJECT_HANDLE hMacSecret;
  1638.   CK_OBJECT_HANDLE hKey;
  1639.   CK_BYTE_PTR      pIV;
  1640. } CK_WTLS_KEY_MAT_OUT;
  1641.  
  1642. typedef CK_WTLS_KEY_MAT_OUT CK_PTR CK_WTLS_KEY_MAT_OUT_PTR;
  1643.  
  1644. typedef struct CK_WTLS_KEY_MAT_PARAMS {
  1645.   CK_MECHANISM_TYPE       DigestMechanism;
  1646.   CK_ULONG                ulMacSizeInBits;
  1647.   CK_ULONG                ulKeySizeInBits;
  1648.   CK_ULONG                ulIVSizeInBits;
  1649.   CK_ULONG                ulSequenceNumber;
  1650.   CK_BBOOL                bIsExport;
  1651.   CK_WTLS_RANDOM_DATA     RandomInfo;
  1652.   CK_WTLS_KEY_MAT_OUT_PTR pReturnedKeyMaterial;
  1653. } CK_WTLS_KEY_MAT_PARAMS;
  1654.  
  1655. typedef CK_WTLS_KEY_MAT_PARAMS CK_PTR CK_WTLS_KEY_MAT_PARAMS_PTR;
  1656.  
  1657. /* CMS is new for version 2.20 */
  1658. typedef struct CK_CMS_SIG_PARAMS {
  1659.   CK_OBJECT_HANDLE      certificateHandle;
  1660.   CK_MECHANISM_PTR      pSigningMechanism;
  1661.   CK_MECHANISM_PTR      pDigestMechanism;
  1662.   CK_UTF8CHAR_PTR       pContentType;
  1663.   CK_BYTE_PTR           pRequestedAttributes;
  1664.   CK_ULONG              ulRequestedAttributesLen;
  1665.   CK_BYTE_PTR           pRequiredAttributes;
  1666.   CK_ULONG              ulRequiredAttributesLen;
  1667. } CK_CMS_SIG_PARAMS;
  1668.  
  1669. typedef CK_CMS_SIG_PARAMS CK_PTR CK_CMS_SIG_PARAMS_PTR;
  1670.  
  1671. typedef struct CK_KEY_DERIVATION_STRING_DATA {
  1672.   CK_BYTE_PTR pData;
  1673.   CK_ULONG    ulLen;
  1674. } CK_KEY_DERIVATION_STRING_DATA;
  1675.  
  1676. typedef CK_KEY_DERIVATION_STRING_DATA CK_PTR \
  1677.   CK_KEY_DERIVATION_STRING_DATA_PTR;
  1678.  
  1679.  
  1680. /* The CK_EXTRACT_PARAMS is used for the
  1681.  * CKM_EXTRACT_KEY_FROM_KEY mechanism.  It specifies which bit
  1682.  * of the base key should be used as the first bit of the
  1683.  * derived key */
  1684. /* CK_EXTRACT_PARAMS is new for v2.0 */
  1685. typedef CK_ULONG CK_EXTRACT_PARAMS;
  1686.  
  1687. typedef CK_EXTRACT_PARAMS CK_PTR CK_EXTRACT_PARAMS_PTR;
  1688.  
  1689. /* CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE is new for v2.10.
  1690.  * CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE is used to
  1691.  * indicate the Pseudo-Random Function (PRF) used to generate
  1692.  * key bits using PKCS #5 PBKDF2. */
  1693. typedef CK_ULONG CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE;
  1694.  
  1695. typedef CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE CK_PTR CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE_PTR;
  1696.  
  1697. /* The following PRFs are defined in PKCS #5 v2.0. */
  1698. #define CKP_PKCS5_PBKD2_HMAC_SHA1 0x00000001
  1699.  
  1700.  
  1701. /* CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE is new for v2.10.
  1702.  * CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE is used to indicate the
  1703.  * source of the salt value when deriving a key using PKCS #5
  1704.  * PBKDF2. */
  1705. typedef CK_ULONG CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE;
  1706.  
  1707. typedef CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE CK_PTR CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE_PTR;
  1708.  
  1709. /* The following salt value sources are defined in PKCS #5 v2.0. */
  1710. #define CKZ_SALT_SPECIFIED        0x00000001
  1711.  
  1712. /* CK_PKCS5_PBKD2_PARAMS is new for v2.10.
  1713.  * CK_PKCS5_PBKD2_PARAMS is a structure that provides the
  1714.  * parameters to the CKM_PKCS5_PBKD2 mechanism. */
  1715. typedef struct CK_PKCS5_PBKD2_PARAMS {
  1716.         CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE           saltSource;
  1717.         CK_VOID_PTR                                pSaltSourceData;
  1718.         CK_ULONG                                   ulSaltSourceDataLen;
  1719.         CK_ULONG                                   iterations;
  1720.         CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE prf;
  1721.         CK_VOID_PTR                                pPrfData;
  1722.         CK_ULONG                                   ulPrfDataLen;
  1723.         CK_UTF8CHAR_PTR                            pPassword;
  1724.         CK_ULONG_PTR                               ulPasswordLen;
  1725. } CK_PKCS5_PBKD2_PARAMS;
  1726.  
  1727. typedef CK_PKCS5_PBKD2_PARAMS CK_PTR CK_PKCS5_PBKD2_PARAMS_PTR;
  1728.  
  1729. /* NSS Specific defines */
  1730.  
  1731. /* defines that have been deprecated in 2.20, but maintained in our
  1732.  * header file for backward compatibility */
  1733. #define CKO_KG_PARAMETERS     CKO_DOMAIN_PARAMETERS
  1734. #define CKF_EC_FP             CKF_EC_F_P
  1735. /* new in v2.11 deprecated by 2.20 */
  1736. #define CKR_KEY_PARAMS_INVALID                0x0000006B
  1737.  
  1738. /* stuff that for historic reasons is in this header file but should have
  1739.  * been in pkcs11n.h */
  1740. #define CKK_INVALID_KEY_TYPE  0xffffffff
  1741.  
  1742. #include "pkcs11n.h"
  1743.  
  1744. /* undo packing */
  1745. #include "pkcs11u.h"
  1746.  
  1747. #endif
  1748.